import React from 'react'
/**
 * 参数：要数据的组件、比如 Mouse 和 Cat
 * 传递过来的组件，你可以可以认为是我返回的匿名类组件的子组件
 */
export const withPosition = Component => {
  // 父组件
  return class extends React.Component {
    // 写好公共逻辑代码
    constructor () {
      super()

      this.state = {
        position: {
          x: 0,
          y: 0
        }
      }
    }

    move = e => {
      this.setState({
        position: {
          x: e.clientX,
          y: e.clientY
        }
      })
    }

    componentDidMount () {
      window.addEventListener('mousemove', this.move)
    }

    componentWillUnmount () {
      window.removeEventListener('mousemove', this.move)
    }

    render () {
      // 父传子
      return <Component position={this.state.position} {...this.props} />
    }
  }
}
